package com.zzuli.yxy.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zzuli.yxy.entity.Song;
import com.zzuli.yxy.result.R;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @auther pony
 * @create 2023-04-04 12:57
 */
public interface SongService extends IService<Song> {

    /**
     * 获取音乐管理分页信息
     * @param pageCurrent 当前页
     * @param pageSize 每页条数
     * @param name 关键字 非必传
     * @return
     */
    R getPage(Integer pageCurrent, Integer pageSize, String name);

    /**
     * 添加歌曲
     * @param song
     * @return
     */
    R addSong(Song song);

    /**
     * 添加歌曲-上传歌曲图片
     * @param file 图片
     * @return
     */
    R uploadAddImg(MultipartFile file);

    /**
     * 添加歌曲-上传歌曲歌词
     * @param file 歌词 .txt 文件
     * @return
     */
    R uploadAddLrc(MultipartFile file);

    /**
     * 更改歌曲当前状态
     * @param status 状态码 0：正常 1：异常
     * @return
     */
    void setStatus(Integer id, Integer status);

    /**
     * 根据歌曲 id，删除歌曲
     * @param id 歌曲id
     * @return
     */
    R deleteSongById(Integer id);

    /**
     * 根据歌曲id，查询单个歌曲信息
     * @param id 歌曲id
     * @return
     */
    R selectOneById(Integer id);

    /**
     * 添加歌曲-上传歌曲 .mp3
     * @param file 歌词 .txt 文件
     * @return
     */
    R uploadAddMp3(MultipartFile file);

    /**
     * 修改歌曲基本信息
     * 只需要修改数据库里的 歌曲基本信息
     * 对于 数据库里的信息可以使用 update
     * 对于 云存储桶里 歌曲图片和歌曲 MP3 文件，先删除再添加，调用的上传的 api，本接口不需要处理
     * @param song
     * @return
     */
    R updateSong(Song song);

    /**
     * 批量删除
     * @param ids 歌曲 id数组
     * @return
     */
    R deleteSongBatch(List<Integer> ids);

    /**
     * 为 歌曲添加歌手信息和此歌手的专辑信息
     * @param songId 待添加的歌曲id
     * @param singerId  要添加的歌手id ，-1 表示用户没传
     * @param albumId  要添加的歌手id ，-1 表示用户没传，就不用添加了
     * @return
     */
    R addSingerAlbumForSong(Integer songId, Integer singerId, Integer albumId);
}
